#include "agenda.h"
#include "ui_agenda.h"
#include <QFileDialog>
#include <QMessageBox>

Agenda::Agenda(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Agenda)
{
    ui->setupUi(this);

    //PUNTERO LA CLASE DE CONEXION CON LA BASE DE DATOS
    cnnDB = conexionDB::instance( );
    //PUNTERO A LA ESTRUCTURA UNIVERSAL DE LOS DATOS
    dtsAll = conexionDB::instanceDats( );
    cnnDB->clearDtsAll();



    //PUNTERO AL WIDGET QUE SE ENCARGA DE INSERTAR LOS DATOS
    addMisDatos = new misdatos;
    //PUNTERO AL WIDGET QUE SE ENCARGA DE MOSTRAR MIS DATOS
    showMisDatos = new vermisdatos;

    //PUNTERO PARA EL WIDGET DE AGREGAR CLIENTE
    aggrclt = new agrclt;
    //PUNTERO PARA EL WIDGET DE BUSCAR CLIENTE
    bscclnt = new buscarcliente;
    //PUNTERO PARA EL WIDGET DE BORRAR CLIENTE
    brrclnt = new borrarcliente;

    //PUNTERO AL WIDGET DE AGREGAR CONTACTOS PROVEEDORES
    aggrcprv = new agrcprv;

    //PUNTERO A LA CLASE QUE SE ENCARGA DE MOSTRAR EL MENSAJE
    //DE CANCELAR DATOS
    //clApp = new cnlApp;
    clApp = cnlApp::initCnlApp();

    //CONECCIONES ENTRE SLOTS Y BOTONES DEL FORM
    connect( ui->QPBCerrar, SIGNAL(clicked()), this, SLOT(closeAplication()) );
    connect( ui->QPBConectar, SIGNAL(clicked()), this, SLOT(showWCDatabase()) );

    connect( ui->QPBSeleccionar, SIGNAL(clicked()), this, SLOT(selectionDBPC()) );
    connect( ui->QPBDesconectar, SIGNAL(clicked()), this, SLOT(closeCDataBase()) );

    connect( ui->QPBINSERTAR, SIGNAL(clicked()), this, SLOT(showAMDatos()) );
    connect( ui->qpBVerMDatos, SIGNAL(clicked()), this, SLOT(showSMDatos()) );
    connect( ui->QPBBORRAR, SIGNAL(clicked()), this, SLOT( showCMDatos()) );
    connect( addMisDatos, SIGNAL(closeWidgetrD()), this, SLOT(swapButtonsAB()) );

    connect( ui->pBCAgregar, SIGNAL(clicked()), this, SLOT(showAddClnt()) );
    connect( ui->pBCBuscar, SIGNAL(clicked()), this, SLOT(shwClint()) );
    connect( ui->pBCBorrar, SIGNAL(clicked()), this, SLOT(clrClint()) );

    connect( ui->pBPrvAgregar, SIGNAL(clicked()), this, SLOT(showAddProv()) );

    connect( ui->qpBAcercaDe, SIGNAL(clicked()), this, SLOT(showAcercaDe()) );


}

Agenda::~Agenda()
{
    if( cnnDB != NULL ){
        //delete cnnDB;
    }


    if( addMisDatos != NULL ){
        delete addMisDatos;
    }
    if( showMisDatos != NULL ){
        delete showMisDatos;
    }
    //PUNTEROS RELACIONADOS CON DATOS DE LOS CLIENTES
    if( aggrclt != NULL ){
        delete aggrclt;
    }

    /*if( bscclnt != NULL ){
        delete bscclnt;
    }
    if( brrclnt != NULL ){
        delete brrclnt;
    }*/

    if( aggrcprv != NULL ){
        delete aggrcprv;
    }

    /*if( clApp != NULL ){
        delete clApp;
    }*/
    /*if( dtsAll != NULL ){
        delete dtsAll;
    }*/
    cnnDB->clearAll();
    delete ui;
}


//SLOT PARA CERRAR LA APLICACION
void Agenda::closeAplication( void ){
    int sel;
    sel = clApp->cancelInsertApp( "Advertencia","Saliendo del sistema", "¿Realmente deseas salir del sistema?", \
                                  "Recuerda que los datos que no se hayan guardado se perderan...\n\n Los datos que sean descartados por este medio no se podran recuperar \n\n" \
                                  "Si antes de cerrar la aplicacion no se termino la coneccion con la base de datos, no se hacegura el correcto funcionamiento del sistema" );
    if( sel == 0 ){
        close();
    }
    return;
}

//FUNCION QUE SE ENCARGA DE ACTIVAR CIERTOS BOTONES
//SOLO SI SE HA REALIZADO CORRECTAMENTE LA CONEXION
//CON LA BASE DE DATOS SELECCIONADA
void Agenda::activeButtonsApp( void ){
    //BOTONES RELACIONADOS CON LOS CLIENTES
    ui->pBCAgregar->setEnabled(true);
    ui->pBCBorrar->setEnabled(true);
    ui->pBCBuscar->setEnabled(true);
    //ui->pBCModificar->setEnabled(true);
    //IMAGEN
    ui->LBLImgLibreta->setEnabled(true);
    //BOTONES RELACIONADOS CON MIS DATOS
    //COMPRUEBA SI YA HAY DATOS EN LA BASE DE DATOS
    if( cnnDB->userInUse() == false ){
        ui->QPBINSERTAR->setEnabled(true);
        ui->qpBVerMDatos->setEnabled(false);
        ui->QPBBORRAR->setEnabled(false);
    }else{
        ui->QPBINSERTAR->setEnabled(false);
        ui->qpBVerMDatos->setEnabled(true);
        //ui->QPBBORRAR->setEnabled(true);
    }
    //BOTONES RELACIONADOS CON LOS PROVEEDORES
    /*ui->pBPrvAgregar->setEnabled(true);
    ui->pBPrvBorrar->setEnabled(true);
    ui->pBPrvBuscar->setEnabled(true);
    ui->pBPrvModificar->setEnabled(true);*/
    return;
}
//FUNCION QUE SE ENCARGA DE DESACTIVAR CIERTOS BOTONES
//SOLO SI SE HA REALIZADO CORRECTAMENTE LA CONEXION
//CON LA BASE DE DATOS SELECCIONADA
void Agenda::desactiveButtonsApp( void ){
    //BOTONES RELACIONADOS CON LOS CLIENTES
    ui->pBCAgregar->setEnabled(false);
    ui->pBCBorrar->setEnabled(false);
    ui->pBCBuscar->setEnabled(false);
    ui->pBCModificar->setEnabled(false);
    //IMAGEN
    ui->LBLImgLibreta->setEnabled(false);
    //BOTONES RELACIONADOS CON MIS DATOS
    ui->QPBINSERTAR->setEnabled(false);
    ui->qpBVerMDatos->setEnabled(false);
    ui->QPBBORRAR->setEnabled(false);
    //BOTONES RELACIONADOS CON LOS PROVEEDORES
    ui->pBPrvAgregar->setEnabled(false);
    ui->pBPrvBorrar->setEnabled(false);
    ui->pBPrvBuscar->setEnabled(false);
    ui->pBPrvModificar->setEnabled(false);
    //INDICAMOS QUE NO SE HA SELECCIONADO UNA
    //BASE DE DATOS PARA USAR EL SISTEMA
    ui->lblDBSelected->setText( "No se ha seleccionado alguna base de datos" );
}
//SLOT PARA CAMBIAR LOS BOTONES
void Agenda::swapButtonsAB( void ){
    //BOTONES RELACIONADOS CON MIS DATOS
    //COMPRUEBA SI YA HAY DATOS EN LA BASE DE DATOS
    if( cnnDB->userInUse() == false ){
        ui->QPBINSERTAR->setEnabled(true);
        ui->qpBVerMDatos->setEnabled(false);
        ui->QPBBORRAR->setEnabled(false);
    }else{
        ui->QPBINSERTAR->setEnabled(false);
        ui->qpBVerMDatos->setEnabled(true);
        ui->QPBBORRAR->setEnabled(true);
    }
    return;
}

//SLOT PARA CERRAR LA APLICACION
//SLOT PARA EL WIDGET QUE SE ENCARGA DE CONECTAR CON LA BASE DE DATOS
void Agenda::showWCDatabase( void ){

    //CONECTA CON LA BASE DE DATOS
    if( cnnDB->createConexionDb3( ) == true ){
        ui->QPBSeleccionar->setEnabled(false);
        ui->QPBConectar->setEnabled(false);
        ui->QPBDesconectar->setEnabled(true);
        ui->QPBVerificar->setEnabled(true);
        //ACTIVA LOS BOTONES DE LA APLICACION
        activeButtonsApp( );
    }else{
        ui->QPBConectar->setEnabled(false);
    }
    return;
}

//SLOT PARA TERMINAR LA CONEXION CON LA BASE DE DATOS
void Agenda::closeCDataBase( void ){
    cnnDB->closeConexionDb3( );
    desactiveButtonsApp( );
    ui->QPBSeleccionar->setEnabled(true);
    ui->QPBConectar->setEnabled(false);
    ui->QPBDesconectar->setEnabled(false);
    ui->QPBVerificar->setEnabled(false);
    return;
}

//SLOT PARA MOSTRAR EL WIDGET DE AGREGAR MIS DATOS
void Agenda::showAMDatos( void ){
    addMisDatos->showNormal();
    activeButtonsApp( );
    return;
}
//SLOT PARA MOSTRAR EL WIDGET DE VER MIS DATOS
void Agenda::showSMDatos( void ){
    showMisDatos->addDB(  );
    showMisDatos->show();
    return;
}
//SLOT PARA BORRAR MIS DATOS
void Agenda::showCMDatos( void ){
    return;
}

//SLOT PARA SELECCIONAR BASE DE DATOS
void Agenda::selectionDBPC( void ){
    ui->QPBConectar->setEnabled(false);
    QString filename = QFileDialog::getOpenFileName( this, tr("Seleccionar Base de Datos a usar"), QDir::currentPath(),
                tr("Archivo SQLite BD (*.sqlite )") );
        if( !filename.isNull() ){

            //AQUI EL CODIGO PARA LA SELECCION DE LA BASE DE DATOS
            if( cnnDB->addDatabaseDb3( filename.toUtf8().constData() ) == true ){
                ui->lblDBSelected->setText( filename.toUtf8().constData() );
            }//else{
                //ui->lblDBSelected->setText( filename.toUtf8().constData() );
                ui->QPBConectar->setEnabled(true);
            //}
        }
        return;
}

//SLOT PARA EL WIDGET DE AGREGAR CLIENTE
void Agenda::showAddClnt( void ){
    aggrclt->clearDatsAll();
    aggrclt->show();
    return;
}
//SLOT PARA EL WIDGET DE BUSCAR CLIENTE
void Agenda::shwClint( void ){
    //bscclnt->addPDb( );
    bscclnt->iniciaDatos();
    bscclnt->show();
    return;
}

//SLOT PARA EL WIDGET DE BORRAR CLIOENTE
void Agenda::clrClint( void ){
    brrclnt->addPDb( );
    brrclnt->show();
    return;
}

//SLOT QUE MUESTRA EL DIALOGO DE AGREGAR PROVEEDOR
void Agenda::showAddProv( void ){
    aggrcprv->show();
    return;
}

//FUNCION PARA MOSTRAR LOS DATOS DE ACERCA DE...
void Agenda::showAcercaDe( void ){
    QMessageBox::warning( this, "Acerca de...", \
                          "Software desarrollado por: \n Arturo Luna (sofoke)\n contacto: sofoke@gmail.com \n Licencia: LGPL v3 \n Beta 0.05",\
                          QMessageBox::Ok  );
    return;
}


